// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause

/*理解：
  这是UI的框，之后的显示都是通过Loader加载而显示，而Loader属于这个对象（即下面的wroot）。
  先显示SplashScreen，待此界面好了，再加载App.qml（隐藏着）。App.qml加载好，会告之SplashScreen（这里用的是调用SplashScreen方法）。
  这时，主动权或驱动事件交给了SplashScreen（它在显示着）。待超时后，交给App.qml。


*/

import QtQuick
import QtQuick.Window
import QtQuick.Dialogs
import QtQuick.Controls     //可有可无
import QtCore               //必须有，否则提示StandardPaths未定义。
import "."
import Shared


/*定义Window，是界面的基础吧？
  不能在QML中使用LOGD()。
*/
Window {
    id: wroot
    visible: true
    width: 720 * .7
    height: 1240 * .7
    title: qsTr("HeartRateGame")
    color: GameSettings.backgroundColor
    property url folderdir: "file:///sdcard/111"

    required property ConnectionHandler connectionHandler       //在main.cpp中已经setInitialProperty()设置了属性。QQ为什么其他.qml中，直接使用的connectionHandler，而不用"required property"。
    required property DeviceFinder deviceFinder                 //因为最先加载qrc:/qml/main.qml，所以在这里判定，能最早发现问题。
    required property AddressType deviceHandler //QQ


    /*这里的Completed，保护Loader{}加载完成吗？
    */
    Component.onCompleted: {
        GameSettings.wWidth = Qt.binding(function() {return width})         //将width和GameSettings.qml中的wWidth绑定，一个变，另一个随着变。主要是向后面的各个page传递宽、高。
        GameSettings.wHeight = Qt.binding(function() {return height})

        console.log("omComp")
    }

    Loader {
        id: splashLoader
        anchors.fill: parent            //指定了Loader大小。
        source: "SplashScreen.qml"
        asynchronous: false             //QQ
        visible: true

        onStatusChanged: {  //当Loader.status变化时。
            if (status === Loader.Ready) {
                appLoader.setSource("App.qml");     //QQ为什么这么做?为什么关联？直接用source赋值不行吗？
            }
        }
    }

    Connections {
        target: splashLoader.item   //.item是"SplashScreen.qml"。
        function onReadyToGo() {    //根据命名规则，信号是readyToGo。在splashloader都ready时（显示1秒，且appLoader已加载），发射信号readyToGo，则splashLoader隐藏释放，appLoader显示并初始化。
            appLoader.visible = true
            appLoader.item.init()       //appLoader.item是指此Loader的source，即
            splashLoader.visible = false
            splashLoader.setSource("")
            appLoader.item.forceActiveFocus();
        }
    }

    Loader {    //status是Loader的属性。因为自身未加载，所以它的status变化是由splashloader加载。
        id: appLoader
        anchors.fill: parent
        visible: false          //默认不显示。
        asynchronous: true
        onStatusChanged: {
            if (status === Loader.Ready)
                splashLoader.item.appReady()    //item是Loader的属性，指向自身。
            if (status === Loader.Error)
                splashLoader.item.errorInLoadingApp();
        }
    }

//    MouseArea{
//        anchors.fill: parent
//        onClicked: {
//            //filedialog.currentFolder= StandardPaths.standardLocations(StandardPaths.CacheLocation)[1];
//            //filedialog.visible= true
//            //connectionHandler.do_it();
//            //msgdialog.open()
//            //folderdilog.open();
//            filedialog.open()
//        }
//    }

//    FileDialog{
//        id: filedialog
//        title: "Please choose a file"
//        visible: false
//        //fileMode: FileDialog.OpenFiles
//        //fileMode: FileDialog.OpenFile
//        fileMode: FileDialog.SaveFile
//        //nameFilters: ["Text files (*.txt)", "HTML files (*.html *.htm)"]
//        //currentFolder: StandardPaths.standardLocations(StandardPaths.GenericDataLocation)[0]
//        //currentFolder: StandardPaths.standardLocations(StandardPaths.CacheLocation)[1]
//        //currentFolder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation)[0]
//        //currentFolder: "file://com.android.externalstorage.documents/document/primary"
//        currentFolder: "///sdcard/51CTO"   //connectionHandler.cur_dir
//        //folder: "/storage/emulated/0/51CTO"
//        //acceptLabel: "YES"
//        //rejectLabel: "NO"
//        //currentFolder: shortcuts.home

//        //Component.onCompleted: visible = true
//        flags: Qt.WindowModal

//        //currentFolder:
//        onAccepted:{
//            console.log("QtDebug accepted");
//            console.log(StandardPaths.displayName(StandardPaths.GenericDataLocation))   //输出为空
//            console.log(StandardPaths.displayName(StandardPaths.AppLocalDataLocation))
//            console.log(StandardPaths.standardLocations(StandardPaths.CacheLocation)[1])
//            console.log(selectedFile)
//            console.log(currentFolder.toLocaleString())
//            //currentFolder: connectionHandler.cur_dir
//            //Qt.url.toString()
//        }


//    }

//    MessageDialog{
//        id: msgdialog
//        buttons: MessageDialog.Ok | MessageDialog.Cancel
//        text: "This is messageDialog TEXT"
//        detailedText: "What's the detailedText?"
//        informativeText: "What's the information?"

//        onButtonClicked: (button, role)=> { //匿名函数
//            if(MessageDialog.Ok === button){
//                console.log("button pressed")
//                close();
//            }
//            else if(MessageDialog.Cancel === button){
//                console.log("cancel pressed")
//                close();
//            }
//        }
//    }

//    FolderDialog{
//        id: folderdilog
//        //currentFolder: StandardPaths.standardLocations(StandardPaths.DesktopLoacation)[0]
//        currentFolder: wroot.folderdir

//        onAccepted: console.log(folder)
//    }

//    FontDialog{
//        id: fontDlg
//    }


}
